Инструкция по обеспечению безопасной работы в домене ALD Pro: политики паролей

Пароли являются самым простым, но при этом не самым безопасным способом аутентификации, поэтому в работе с паролями пользователи должны придерживаться определенных правил и политики паролей помогают гарантировать, что эти правила соблюдаются.

Пароли пользователей в домене

Пароль представляет из себя набор символов, который известен только самому пользователю и проверяющей стороне, поэтому, если пользователь может предъявить доказательство того, что пароль ему известен, это является подтверждением аутентичности пользователя, что он именно тот, за кого себя выдает.

В открытом виде пароли не хранят, в базу данных записывают хэши, и так как в домене ALD Pro (FreeIPA) используется сразу несколько разных механизмов аутентификации, у пользователей есть несколько хэшей:

  • userPassword хранит PBKDF2-SHA256 хэш, который используется для обычной LDAP аутентификации, так называемой привязки (Bind). Во избежание перехвата пароля этот способ аутентификации рекомендуют использовать только с шифрованием траффика (LDAPS или LDAP+StartTLS).

  • krbPrincipalKey хранит AES хэши, которые используются для аутентификации по протоколу Kerberos V5. Это наиболее рекомендуемый способ аутентификации с использованием паролей, т.к. он обеспечивает наибольший уровень безопасности.

  • ipaNTHash хранит MD4 хэш, который используется для NTLM аутентификации. Этот механизм аутентификации необходим для интеграции с MS AD, простой аутентификации на файловом сервере при обращении к нему по IP адресу и интеграции с некоторыми другими внешними системами.

Для изменения пароля новое значение следует записать открытым текстом в атрибут userPassword, сервер автоматически сгенерирует все необходимые ключи и запишет в базу уже хэшированные значения. В силу такой особенности работы сервера записывать в каталог уже хэшированные значения запрещено. Обойти это ограничение можно только при создании новых пользователей, если сервер будет переведен в режим миграции.

Что такое политики паролей

Пароли, к сожалению, являются не самым безопасным механизмом аутентификации, так как их можно подобрать или перехватить, поэтому в работе с паролями необходимо следовать определенным правилам, или так называемым политикам, которые повышают уровень безопасности учетных записей в домене: пароли нужно периодически обновлять, использовать следует достаточно длинные комбинации, состоящие из разных категорий символов, и т.п.

Чем более строгие требования задает политика паролей, тем сложнее злоумышленнику подобрать пароль и воспользоваться результатами успешной атаки. Но, вместе с тем, и пользователям сложнее работать в таком домене, поэтому для разных групп пользователей следует устанавливать разные требования, обеспечивающий компромисс между удобством и безопасностью.

Механизм работы политик паролей

Механизм политик паролей в домене ALD Pro (FreeIPA) очень гибкий: для каждой группы пользователей можно создать свою собственную политику паролей. Список политик с их приоритетами хранится в контейнере с DN cn=cosTemplates,cn=accounts,{base_dn}=ald,{base_dn}=company,{base_dn}=lan, параметры политик вынесены отдельно в cn=kerberos,{base_dn}=ald,{base_dn}=company,{base_dn}=lan. Связь между записями осуществляется через значение атрибута krbPwdPolicyReference. При удалении группы пользователей все связанные с ней записи политики паролей удаляются автоматически.

Учитывая, что пользователь может входить сразу в несколько групп, алгоритм проверки выглядит следующим образом:

  • Из «cn=cosTemplates, …» отбираются политики, под действие которых попадает текущий пользователь в соответствии с его участием в группах. Параметры политики берутся из «cn=kerberos, …» по ссылке из атрибута krbPwdPolicyReference.

  • Если на пользователя не распространяется действие ни одной политики, ему будет назначена глобальная политика по умолчанию (global_policy).

  • Если некоторый пользователь попадает под действие сразу нескольких политик, то выбирается одна из них, у которой будет наименьшее значение по приоритету, параметры политик не суммируются, см. Выбор политики в зависимости от приоритета.

Выбор политики в зависимости от приоритета

Параметр

Политика для группы А (приоритет 0)

Политика для группы В (приоритет 1)

Результат (используются параметры для группы А)

Максимальный срок действия

60 дней

90 дней

60 дней

Минимальная длина

10 символов

0 (без ограничений)

10 символов

Проверки паролей включают возможности MIT Kerberos, а также поддерживают набор некоторых дополнительных параметров, см. Параметры политик паролей. Проверки Kerberos и Параметры политик паролей. Дополнительные проверки.

Параметры политик паролей. Проверки Kerberos

Параметр политики

Значение глобальной политики по умолчанию

Максимальный срок действия задает период в количестве дней, в течение которого система не будет требовать смены пароля

krbMaxPwdLife = 90 Пароль активен 90 дней, после чего пользователю будет предложено сменить его

Минимальный срок действия задает период в часах, в течение которого система будет запрещать повторную смену пароля

krbMinPwdLife = 1 После смены пароля, пользователь должен подождать 1 час перед повторной сменой

Размер журнала определяет количество предыдущих паролей, которые нельзя использовать повторно

krbPwdHistoryLength = 0 Запрет на повторное использование паролей не налагается

Классы символов – этот параметр указывает, сколько разных классов символов должно быть использовано в пароле. Все возможные символы подразделяются на следующие пять классов: цифры (ASCII), буквы нижнего регистра (ASCII), буквы верхнего регистра (ASCII), прочие символы ASCII, все остальные символы, не вошедшие ни в одну из предыдущих групп, например, €, ‰, Ğ, ¼, ¤ и т.д. Использование одного и того же символа более двух раз подряд уменьшает количество классов на один, например, у пароля «Secret11pwd» будет три класса (большие буквы + маленькие буквы + цифры), а у пароля «Secret111pwd» их станет два (минус штраф за повторы символа «1»). Если повторяющиеся символы окажутся в конце пароля, то последний из них не будет учитываться, поэтому на пароль «Secret111pwd» штраф налагаться не будет

krbPwdMinDiffChars = 0 Значение по умолчанию – 0. Это говорит об отсутствии каких либо требований к сложности пароля

Минимальная длина задает минимально допустимое количество символов в пароле

krbPwdMinLength = 8 Пользователь не может использовать пароль короче 8 символов

Максимальное количество ошибок определяет, сколько раз пользователь может неправильно ввести пароль, прежде чем его аккаунт будет временно заблокирован. Блокировка выполняется только на текущем контроллере, на другие сервера эта информация не передается

krbPwdMaxFailure = 6 Пользователь будет заблокирован после 7 неверно введенных паролей подряд

Интервал сброса ошибок задает период в секундах, по истечении которого счетчик неудачных попыток входа будет сброшен

krbPwdFailureCountInterval = 60 Если после 6 неудачных попыток введения пароля подряд пользователь подождет 1 минуту, у него будет еще 6 попыток до временной блокировки учетной записи

Длительность блокировки задает период в секундах, в течение которого пользователь не сможет выполнить аутентификацию в домене. Блокировка накладывается после превышения количества разрешенных неудачных попыток входа. Блокировка выполняется только на текущем контроллере, на другие сервера эта информация не передается

krbPwdLockoutDuration = 600 Заблокированный пользователь не сможет выполнить вход в систему в течение 10 минут

Параметры политик паролей. Дополнительные проверки

Параметр политики

Значение глобальной политики по умолчанию

Использовать список запрещённых слов - определяет необходимость проверки пароля по списку запрещённых слов: создание или изменение пароля будет завершаться ошибкой, если в составе любой подстроки нового пароля будет использовано любое слово из списка запрещённых. Актуальный список может быть найден в разделе Групповые политики - Политики паролей - Список запрещённых слов. Проверка не чувствительна к регистру

aldproBadWordsCheck = FALSE Проверка по списку запрещённых слов отключена (Подробнее об использовании списка запрещённых слов описано в разделе 6.6.5 Руководства администратора)

Минимум заглавных - задаёт минимальное количество заглавных символов в пароле

aldproUpCredit = 0 Значение по умолчанию – 0. Это говорит об отсутствии требования к наличию заглавных символов в пароле

Минимум строчных - задаёт минимальное количество строчных символов в пароле

aldproLowCredit = 0 Значение по умолчанию – 0. Это говорит об отсутствии требования к наличию строчных символов в пароле

Минимум цифр - задаёт минимальное количество цифр в пароле

aldproDigCredit = 0 Значение по умолчанию – 0. Это говорит об отсутствии требования к наличию цифр в пароле

Проверять совпадение с логином - создание или изменение пароля будет завершаться ошибкой, если в составе любой подстроки нового пароля будет использован логин пользователя. Проверка не чувствительна к регистру

ipaPwdUserCheck = FALSE Проверка на совпадение с логином отключена

Максимум повторений подряд - максимальное количество повторений подряд одинаковых символов которое может быть использовано в пароле. При подсчёте повторений подряд учитываются все символы кроме первого, т.е. в последовательности «aaa» всего два повторения

ipaPwdMaxRepeat = 0 Значение по умолчанию – 0. Это говорит об отсутствии требования к максимальному количеству повторений символов в пароле

Максимум монотонной последовательности - максимальное количество символов монотонной последовательности которое может быть использовано в пароле. Монотонной считается последовательность букв или цифр которые убывают либо возрастают по порядку, например: «ABCDEF» или «98765432». При определении максимума монотонной последовательности учитываются все символы кроме первого, т.е. в последовательности «АБВ» максимум равняется двум

ipaPwdMaxSequence = 0 Значение по умолчанию – 0. Это говорит об отсутствии требования к максимальной длине монотонной последовательности символов в пароле

Максимум одного класса подряд - задаёт максимальное количество повторений подряд символов одного класса которое может быть использовано в пароле. Проверка относит к разным классам заглавные и строчные символы не только из набора ASCII, а символы классов «прочие символы ASCII» и «остальные символы» относятся к одному классу. При подсчёте повторений подряд учитываются все символы кроме первого, т.е. в последовательности «aaa» всего два повторения

aldproMaxClassRepeat = 0 Значение по умолчанию – 0. Это говорит об отсутствии требования к максимальному количеству повторений символов одного класса в пароле

Также создание или изменение пароля всегда будет завершаться ошибкой несоответствия политике паролей, в случаях если:

  • пароль является палиндромом;

  • пароль содержит менее 6 символов.

При использовании различных сценариев установки/смены/сброса пароля текст ошибки может отличаться.

Внимание

До версии ALD Pro 3.0.0 первый пароль, назначаемый администратором при создании учётной записи пользователя, считался временным, поэтому мог быть установлен в обход политики паролей, распространяющей своё действие на пользователя. По такой же логике происходил сброс пароля пользователя администратором. Начиная с версии 3.0.0 пароли, устанавливаемые администраторами, проходят обязательную проверку на соответствие политике паролей. Исключения составляют:

  1. Смена пароля пользователя от имени суперпользователя LDAP-каталога cn=Directory Manager;

  2. Смена пароля пользователя от имени root-пользователя командой ipa-getkeytab с ключом -p;

  3. Создание/сброс пароля пользователя от имени пользователя, который является членом группы «passSyncManagersDNs» (соответствующий атрибут имеет конфигурационный файл плагина 389ds - ipa_pwd_extop);

  4. Настройка «Минимальный срок действия» политики не учитывается при сбросе пароля пользователем, имеющим необходимые привилегии.

Возможные варианты ошибок при попытке установить пароль, не соответствующий политике

Сценарий

Текст ошибки

Установка/смена/сброс пароля на портале управления ALD Pro

Пароль не соответствует требованиям политики

Сброс пароля пользователю от имени привилегированной УЗ или смена пользователем своего пароля с помощью ipa passwd

В зависимости от типа проверки, которая была провалена возможны варианты:

  • ipa: ERROR Constraint violation: Failed to update password

  • ipa: ERROR Constraint violation: <текст сообщения>

Сброс пароля пользователю от имени привилегированной УЗ с помощью ipa user-mod с ключом –password

В зависимости от типа проверки, которая была провалена возможны варианты:

  • ipa: ERROR Constraint violation: Failed to update password

  • ipa: ERROR Constraint violation: <текст сообщения>

Смена пользователем пароля с использованием kpasswd

В зависимости от типа проверки, которая была провалена возможны варианты:

  • Server error: Password not changed. Kerberos database constraints violated while trying to change password;

  • Password change rejected: <текст сообщения>

Смена пользователем пароля (если срок действия текущего пароля истёк) с использованием kinit

В зависимости от типа проверки, которая была провалена возможны варианты:

  • kinit: Password change failed while getting initial credentials

  • Password change rejected: <текст сообщения> Password not changed.. Please try again

Сброс пароля пользователю от имени привилегированной УЗ с помощью ldapmodify (с явным указанием атрибута userPassword)

ldap_modify: Constraint violation (19) additional info: <текст сообщения>

Сброс пароля пользователю от имени привилегированной УЗ с помощью ldappasswd

Result: Constraint violation (19) Additional info: Failed to update password

Смена пользователем пароля (если срок действия текущего пароля истёк) с использованием fly-dm_greet

В зависимости от типа проверки, которая была провалена возможны варианты:

  • Не удалось сменить пароль. Сообщение сервера: Kerberos database constraints violated while trying to change password

  • Не удалось сменить пароль. Сообщение сервера:<текст сообщения> Password not changed

Сброс пароля пользователю от имени привилегированной УЗ с помощью расширенной ldap-операции (Password Modify)

Error while executing extended operation - [LDAP result code 19 - constraintViolation] Failed to update password

Смена пользователем пароля с использованием fly-passwd

В зависимости от типа проверки, которая была провалена возможны варианты:

  • Ваш пароль не изменён. Password change failed. Server message: <текст сообщения>

  • Ваш пароль не изменён. Password change failed. Server message: Password not changed. Kerberos database constraints violated while trying to change password

Смена пользователем пароля (если срок действия текущего пароля истёк) при попытке установки ssh-подключения

В зависимости от типа проверки, которая была провалена возможны варианты:

  • Password change failed. Server message: Password not changed. Kerberos database constraints violated while trying to change password

  • Server message: <текст сообщения>

Создание политики паролей

Через портал управления

Откройте страницу Групповые политикиПолитики паролей и нажмите кнопку [+ Создать]. Заполните обязательные поля Группа пользователей, Приоритет и нажмите кнопку [Сохранить].

../../../_images/%D1%80%D0%B8%D1%81110.png

Создание политики паролей

Далее вам станет доступна страница управления политикой, где вы можете задать необходимые настройки.

../../../_images/%D1%80%D0%B8%D1%8122.png

Настройка политики паролей

Из командной строки

Внимание

При переходе с ранних версий ALD Pro на версию 3.0.0 и выше схема данных расширена двумя новыми классами aldpro-pwd-policy и ipaPwdPolicy, позволяющими настраивать дополнительные параметры политик. Новые и ранее существовавшие политики паролей дополняются такими классами автоматически, а значения атрибутов, соответствующих дополнительным проверкам, присваиваются по умолчанию. Чтобы при создании новой политики с помощью командной строки явно задать значения таких атрибутов, необходимо в первую очередь добавить новые классы.

Для этого воспользуйтесь ключом --addattr команды pwpolicy-add, который также используется при добавлении атрибутов, соответствующих дополнительным проверкам. При использовании ключа --addattr его аргумент передаётся в формате «атрибут=значение».

$ ipa pwpolicy-add admins --priority=0 --addattr="objectClass=aldpro-pwd-policy" --addattr="objectClass=ipaPwdPolicy" --addattr="ipaPwdMaxRepeat=3" --addattr="ipaPwdMaxSequence=3" --addattr="aldproBadWordsCheck=TRUE" --addattr="ipaPwdUserCheck=TRUE" --addattr="aldproDigCredit=2" --addattr="aldproUpCredit=2" --addattr="aldproLowCredit=2" --addattr="aldproMaxClassRepeat=5" --maxlife=45 --minlife=0 --history=12 --minclasses=5 --minlength=12 --maxfail=3 --failinterval=120 --lockouttime=1200
  Группа: admins
  Максимальный срок действия (в днях): 45
  Минимальный срок действия (в часах): 0
  Размер журнала : 12
  Классы символов: 5
  Минимальная длина: 12
  Приоритет: 0
  Максимальное количество ошибок: 3
  Интервал сброса ошибок: 120
  Длительность блокировки: 1200

где:

–maxlife= — Максимальный срок действия в днях;

–minlife= — Минимальный срок действия в часах;

–history= — Размер журнала;

–minclasses= — Классы символов;

–minlength= — Минимальная длина;

–priority= — Приоритет политики;

–maxfail= — Максимальное количество ошибок;

–failinterval= — Интервал сброса ошибок в секундах;

–lockouttime= — Длительность блокировки в секундах.

Чтобы изменить параметры kerberos уже существующей политики, воспользуйтесь командой ipa pwpolicy-mod:

$ ipa pwpolicy-mod admins --maxlife=30
  Группа: admins
  Максимальный срок действия (в днях): 30
  Минимальный срок действия (в часах): 0
  Размер журнала : 12
  Классы символов: 5
  Минимальная длина: 12
  Приоритет: 0
  Максимальное количество ошибок: 3
  Интервал сброса ошибок: 120
  Длительность блокировки: 1200

Для изменения дополнительных параметров воспользуйтесь ключом --setattr команды pwpolicy-mod. При использовании ключа --setattr его аргумент передаётся в формате «атрибут=значение».

$ ipa pwpolicy-mod admins --setattr="aldproMaxClassRepeat=2"

Следует учитывать, что срок действия пароля проверяется не по значению maxlife в политике, а по значению атрибута krbPasswordExpiration, которое устанавливается пользователю при изменении пароля, поэтому изменение параметра в политике сразу ни на что не повлияет. Чтобы принудительно изменить пользователю значение атрибута krbPasswordExpiration вы можете воспользоваться командой user-mod:

$ ipa user-mod admin --password-expiration 20230528010101Z
----------------------------
Изменён пользователь "admin"
----------------------------
  Имя учётной записи пользователя: admin
  Фамилия: Administrator
  Домашний каталог: /home/admin
  Оболочка входа: /bin/bash
  Псевдоним учётной записи: admin@ALD.COMPANY.LAN, root@ALD.COMPANY.LAN
  Окончание действия пароля пользователя: 20230528010101Z
  UID: 959800000
  ID группы: 959800000
  Учётная запись отключена: False
  Link to department: ou=ald.company.lan,cn=orgunits,cn=accounts,{base_dn}=ald,{base_dn}=company,{base_dn}=lan
  Пароль: True
  Участник групп: trust admins, lpadmin, admins
  Роли: ALDPRO - Main Administrator
  Доступные ключи Kerberos: True

Срок действия пароля задается в формате временной метки, где:

  • 2023 – год;

  • 05 – месяц;

  • 28 – день месяца;

  • 010101 – часы, минуты, секунды;

  • Z – часовой пояс. Точность до секунд не имеет большого значения, поэтому обычно используют время по нулевому (Zero) меридиану.

Проверить текущее значение можно командой user-show

$ ipa user-show admin --raw --all | grep krbPasswordExpiration
  krbPasswordExpiration: 20230528010101Z

Список запрещённых слов

Список запрещённых слов является одной из функций политик паролей (подробно описана в Портал управления. Настройка и работаГрупповые политикиПолитики паролейСписок запрещенных слов).

При создании или изменении пароля пользователя функция выполняет проверку вхождения слов списка в состав любой подстроки текста пароля. «Подстрокой» считается непустая связанная часть строки.

Если вхождение запрещённого слова в состав пароля обнаружено - такой пароль не пройдёт проверку на соответствие политике. Проверка вхождения игнорирует регистр символов и запрещённые слова короче четырёх символов.

Список запрещённых слов одинаков для всей системы, при этом включение и отключение функции проверки паролей по списку индивидуально настраивается в карточке политики паролей с помощью переключателя Использовать список запрещённых слов.

При нахождении в списке 1000 слов длиной 8 символов производительность функции проверки пароля по списку запрещённых слов составляет около 100 операций в секунду (проверка выполнялась на 20 тысячах одновременных операций смены пароля). Производительность зависит от количества одновременных операций и может уменьшаться при росте их числа.

Просмотр и управление списком осуществляются на странице Групповые политикиПолитики паролейСписок запрещённых слов.

../../../_images/%D1%80%D0%B8%D1%8131.png

Список запрещённых слов

Список хранится в виде строки в реплицируемом атрибуте aldproBadWords, который хранится в контейнере c DN cn=<область Керберос>,cn=kerberos,<доменный_суффикс> и по умолчанию содержит несколько распространённых паролей, но может быть просмотрен и изменён при наличии необходимых привилегий.

Привилегии для работы со списком запрещённых слов

Привилегия

Описание

На что распространяется

Password Policies - Read

Предоставляемые права на:

  • просмотр списка политик паролей;

  • просмотр карточек политик паролей;

  • просмотр списка запрещенных слов

На весь домен

Password Policies - Modify

Предоставляемые права на:

  • изменение настроек политик паролей системы;

  • редактирование списка запрещенных слов

На весь домен

Также доступен функционал скачивания списка в локальный файл и загрузки списка из текстового файла, подготовленного заранее локально. Файл должен содержать слова, разделённые как минимум одним пробельным символом, а его размер не должен превышать 2 Мб. Рекомендуется использовать файлы в кодировке UTF-8, форматов .odt, .txt, .rtf, .doc, .docx.

Из командной строки возможна полная замена списка с помощью утилиты ldapmodify из пакета ldap-utils (см. Справочные материалыАвтоматизация задач администрирования через LDAP-запросыВзаимодействие с каталогом через LDAP-протоколУтилиты для работы с LDAP-каталогомМодификация записей в каталоге через ldapmodify).

Для этого выполните следующие действия:

  1. Ввести команду на подключение к каталогу и нажать клавишу Enter:

ldapmodify -Y GSSAPI -H ldap://dc-1.ald.company.lan:389
  1. В интерактивном режиме ввести DN целевого контейнера, в котором хранится атрибут aldproBadWords:

dn: cn=ALD.COMPANY.LAN,cn=kerberos,dc=ald,dc=company,dc=lan
  1. В интерактивном режиме ввести и нажать Enter:

changetype: modify
  1. В интерактивном режиме ввести и нажать Enter:

replace: aldproBadWords
  1. В интерактивном режиме ввести и нажать Enter (после знака «:» слова для добавления в список запрещённых вводятся через пробел):

aldproBadWords: Welcome admin Passw0rd
  1. Нажать Enter ещё раз.

  2. Завершить подключение:

Ctrl+C